//////////////////////////////////////////////////////////////////////////

#ifndef _ICONNECTION_H_
#define _ICONNECTION_H_

//////////////////////////////////////////////////////////////////////////

#ifndef _OBSERVABLE_H_
#include "observable.h"
#endif

#ifndef _NETWORKPACKET_H_
#include "networkpacket.h"
#endif

//////////////////////////////////////////////////////////////////////////


/** Base network connection interface for client and server
*
*  @author   Pasechnik Roman
*  @since    Jun 29th, 2009
*  @updated  Jan 18th, 2010
*/
class IConnection : public Observable
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Destructor */
    virtual ~IConnection() {}


//////////////////////////////////////////////////////////////////////////


    /** Sends TCP */
    virtual void SendTCP( const NetworkPacket& _data ) = 0;


    /** Sends UDP */
    virtual void SendUDP( const NetworkPacket& _data ) = 0;


//////////////////////////////////////////////////////////////////////////


    /** Gets received TCP data */
    virtual const NetworkPacket& GetTCP() const = 0;


    /** Gets received UDP data */
    virtual const NetworkPacket& GetUDP() const = 0;


//////////////////////////////////////////////////////////////////////////


    /** Tells if connection is connected */
    virtual bool IsConnected() const = 0;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

// Disable MS warning about multiple inheritance
// warning C4250: 'SubBla' : inherits 'Bla::Bla::BlaBla()' via dominance
#pragma warning( disable : 4250 )

//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
